# Python内置函数，map()、reduce()

# map
'''
我们先看map。map()函数接收两个参数，一个是函数，一个是 Iterable， map 将传入的函数一次作用到序列的每个元素，并把结果作为新的 Iterator返回
举例说明：比如我们有一个函数f(x)=x*x, 要把这个函数作用在一个list[1,2,3,4,5,6,7,8,9], 就可以用 map() 实现如下：
'''


def f(x):
    return x * x


r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(r)  # <map object at 0x00000224D1F65270>
print(list(r))  # 转成list输出：[1, 4, 9, 16, 25, 36, 49, 64, 81]

# reduce
'''
再看reduce用法，reduce把一个函数作用在一个序列上[x1, x2, x3, ...]上，这个函数必须接收两个参数，reduce把结果继续和序列的下一个元素做累积计算，其效果就是：
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
'''
from functools import reduce


def add(x, y):
    return x + y


print(reduce(add, [1, 3, 5, 7, 9]))
